// PROGRAMA : SCRPR001
// BIBLIOTECA : SISP
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// CLIENTE : GEJUSPC - GERENCIA DE ESTADO DA JUSTICA, SEGURANCA
// PUBLICA E CIDADANIA / INSTITUTO DE IDENT.
// OBJETIVO : EMISSAO DA FOLHA DE ANTECEDENTES CRIMINAIS
// PROGRAMADOR:
// DATA : 18 DE SETEMBRO 2000
// ALTERACAO : TROCA DE NOME DA IMPRESSORA DEFAULT PARA PSSP0023
// : PINHO - 14/11/2012
// : TROCA DE NOME DA IMPRESSORA DEFAULT PARA PSSP0229
// : PINHO - 24/04/2013
// ALTERACAO NA INTERFACE
// ALTERACAO
// BACKUP DO PROGRAMA ORIGINAL: SCR01PIN
// PINHO - 01/10/2013
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Scrpr001Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrpr001A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrpr001B;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Scrpr001 OBJETIVO : EMISSAO DA FOLHA DE ANTECEDENTES CRIMINAIS *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/scrpr001")
public class Scrpr001 {
	// Views utilizadas
	SicCadastro criminalView = new SicCadastro();
	// Telas/relatorios utilizados
	Scrpr001A scrpr001A;
	Scrpr001B scrpr001B;
	Scrpr001Report report;
	// Includes utilizados
	// Areas globais / session
	Scrg001 scrg001;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Scrpr001 scrpr001Anterior;
	String faseproc = "0";

	// END OF SCRP001
	// private int aaaammdd = 0;
	// private String nome = "";
	// private int idma = 0;
	// private int dataCorrente = 0;
	// private String texto1 = "";
	// private String texto2 = "";
	// private String texto3 = "";
	private int cont = 0;
	private int i = 0;

	// 01 C1 (N02)

	private Scrpr001A preMapas() throws JRException {
		sessao.getScrg001().setWVltw(18);
		sessao.getScrg001().setWProgramaw(this.getClass().getSimpleName().toUpperCase());
		scrpr001A = new Scrpr001A(true, sessao);
		scrpr001B = new Scrpr001B(true, sessao);
		scrpr001A.setTexto1("A SUA SENHORIA SR(A)");
		scrpr001A.setTexto2("DELEGADO(A) DE POLICIA CIVIL");
		scrpr001A.setDataCorrente(UtilBean.obtemDataDia());
		scrpr001A.setNumero(0);
		scrpr001A.setIdma("");
		// ASSIGN #IMP = 'PSEATI08'
		// MP=1
		return scrpr001A;
	}

	public Scrpr001(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Scrpr001A scrpr001A, Scrpr001B scrpr001B) {
		try {
			return main(scrpr001A, scrpr001B);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroScrcerro(e, sessao, this.getClass().getSimpleName());
		}

		return null;
	}

	private InputStreamDownload main(Scrpr001A pscrpr001A, Scrpr001B pscrpr001B) throws JRException, ParseException, FileNotFoundException {
		if (pscrpr001A == null && pscrpr001B == null) {
			primeiraVez = true;
			// scrpr001A = new Scrpr001A (primeiraVez);
			scrpr001A = preMapas();
			scrpr001A.setNavegar("../scrpr001/executar");
			result.include("scrpr001A", scrpr001A);
			sessao.setAtributo("SCRPR001", this);
			scrpr001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(pscrpr001A, pscrpr001B);
		}

		// RELATORIO 1 PS=63 LS=85 SG=ON
		report = new Scrpr001Report();
		report.setPageSize(63);
		report.setLineSize(85);
		// RELATORIO
		// DEFINE PRINTER(1) OUTPUT #IMP

		// report.setDd(scrpr001A.getDd());
		// report.setNomer(scrpr001A.getNomer());
		// report.setNomei(scrpr001A.getNomei());
		// report.setSinituser(scrpr001A.getSinituser());
		// report.setId(scrpr001A.getId());
		// report.setIm(scrpr001A.getIm());
		// report.setIa(scrpr001A.getIa());
		// report.setTexto1(scrpr001A.getTexto1());
		// report.setTexto2(scrpr001A.getTexto2());
		// report.setTexto3(scrpr001A.getTexto3());
		// report.setHoraCorrente(scrpr001A.getHoraCorrente());
		// report.setAaaa(scrpr001A.getAaaa());
		// report.setMm(scrpr001A.getMm());
		// report.setDd(scrpr001A.getDd());

		cont = 0;
		switch (faseproc) {
		case "0": {
			scrpr001A.receberTela(false, result);
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna) || scrpr001A.getNumero() == 0) {
				Scrpp001 scrpp001 = new Scrpp001(result, sessao);
				scrpp001.executar(null);
				return null;
			}
			criminalView.pesquisaRegEstadualGeral((long) scrpr001A.getNumero());

			if (criminalView.registrosProcessados() == 0 || scrpr001A.getNumero() == 0) {

				faseproc = "0";
				sessao.setAtributo("SCRPR001", this);
				result.include("scrpr001A", scrpr001A);
				scrpr001A.enviarMensagem("", "O NUMERO INFORMADO DO REGISTRO NAO FOI CADASTRADO, OU FOI DIGITADO INCORRETAMENTE,  VERIFIQUE...!");
				scrpr001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return null;
			} else {
				scrpr001B.setDd(scrpr001A.getDd());
				scrpr001B.setNomer(scrpr001A.getNomer());
				scrpr001B.setNomei(scrpr001A.getNomei());
				scrpr001B.setSinituser(scrpr001A.getSinituser());
				scrpr001B.setId(scrpr001A.getId());
				scrpr001B.setIm(scrpr001A.getIm());
				scrpr001B.setIa(scrpr001A.getIa());
				scrpr001B.setTexto1(scrpr001A.getTexto1());
				scrpr001B.setTexto2(scrpr001A.getTexto2());
				scrpr001B.setTexto3(scrpr001A.getTexto3());
				scrpr001B.setHoraCorrente(scrpr001A.getHoraCorrente());
				scrpr001B.setAaaa(scrpr001A.getAaaa());
				scrpr001B.setMm(scrpr001A.getMm());
				scrpr001B.setDd(scrpr001A.getDd());
				scrpr001B.setNumero(criminalView.getRegEstadualGeral());
				scrpr001B.setNaturalidade(criminalView.getNaturalidade());
				String apelidoAlcunhas = "";
				for (i = 1; i < criminalView.getApelidoAlcunhas().length; i++) {
					if (criminalView.getApelidoAlcunhas(i) != null && !criminalView.getApelidoAlcunhas(i).trim().equals("")) {
						apelidoAlcunhas = apelidoAlcunhas + " " + criminalView.getApelidoAlcunhas(i);

					}
				}

			}

			// 374
			scrpr001B.setNome(criminalView.getNomeCompleto());
			scrpr001B.setAaaammdd(String.valueOf(criminalView.getDataNasc()));
			scrpr001B.setJobservacoez(criminalView.getObservacao());
			scrpr001B.setFdc(UtilBean.concatena(criminalView.getPolegarDireito(), criminalView.getIndicadorDireito(), criminalView.getMedioDireito(), criminalView.getAnularDireito(), criminalView.getMinimoDireito(), criminalView.getPolegarEsquerdo(), criminalView.getIndicadorEsquerdo(), criminalView.getMedioEsquerdo(), criminalView.getAnularEsquerdo(), criminalView.getMinimoEsquerdo()));
			faseproc = "1";
			scrpr001B.setNavegar("../scrpr001/executar");
			result.include("scrpr001B", scrpr001B);
			sessao.setAtributo("SCRPR001", this);
			scrpr001B.enviarTela(false, result, getClass().getSimpleName().toUpperCase());

			return null;
		}
		case "1": {

			// Par�grafo: ini01()
			while (criminalView.pesquisaRegEstadualGeral((long) scrpr001B.getNumero())) {

				report.setDd(scrpr001B.getDd());
				report.setNomeR(scrpr001B.getNomer());
				report.setNomeI(scrpr001B.getNomei());
				report.setSinituser(scrpr001B.getSinituser());
				report.setId(scrpr001B.getId());
				report.setIm(scrpr001B.getIm());
				report.setIa(scrpr001B.getIa());
				report.setTexto1(scrpr001B.getTexto1());
				report.setTexto2(scrpr001B.getTexto2());
				report.setTexto3(scrpr001B.getTexto3());
				report.setHoraCorrente(scrpr001B.getHoraCorrente());
				report.setAaaa(scrpr001B.getAaaa());
				report.setMm(scrpr001B.getMm());
				report.setDd(scrpr001B.getDd());

				// scrpr001A.setNome(criminalView.getNomeCompleto());
				// scrpr001A.setAaaammdd(String.valueOf(criminalView.getDataNasc()));
				// scrpr001B.setJobservacoez(criminalView.getObservacao());
				// scrpr001A.setFdc(UtilBean.concatena(criminalView.getPolegarDireito(), criminalView.getIndicadorDireito(), criminalView.getMedioDireito(), criminalView.getAnularDireito(),
				// criminalView.getMinimoDireito(), criminalView.getPolegarEsquerdo(), criminalView.getIndicadorEsquerdo(), criminalView.getMedioEsquerdo(), criminalView.getAnularEsquerdo(),
				// criminalView.getMinimoEsquerdo()));
				report.setRegistroEstadualGeral(criminalView.getRegEstadualGeral());
				String apelidoAlcunhas = "";
				for (i = 1; i < criminalView.getApelidoAlcunhas().length; i++) {
					if (criminalView.getApelidoAlcunhas(i) != null && !criminalView.getApelidoAlcunhas(i).trim().equals("")) {
						apelidoAlcunhas = apelidoAlcunhas + " " + criminalView.getApelidoAlcunhas(i);

					}
				}
				// report.setApelidoAlcunhas(criminalView.getApelidoAlcunhas(1));
				report.setNaturalidade(criminalView.getNaturalidade());
				report.setNomeMae(criminalView.getNomeMae());

				// scrpr001B.receberTela(false, result);
				// SCRPR001
				if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
					Scrpr001 scrpr001 = new Scrpr001(result, sessao);
					scrpr001.executar(null, null);
					return null;
				}
				cont += 1;
				if (report.getPageLine() == 1)
					report.saltaLinhas(1);
				if (cont == 1) {
					report.gravaRelatorio(1);

					// RELATORIO
					cont += 1;
				} else {
					report.gravaRelatorio(2);

					// RELATORIO
				}
				i = 0;
				for (i = 1; i < criminalView.getObservacao().length; i++) {
					if (criminalView.getObservacao(i) != null && !criminalView.getObservacao(i).trim().equals("")) {
						report.setJobservacoez(criminalView.getObservacao(i));
						report.gravaRelatorio(3);
					}
				}

			}

		}
		}

		if (criminalView.totalRegistros() == 0) {
			if (scrpr001A.getNumero() != 0) {
				scrpr001A.enviarMensagem("", "O NUMERO INFORMADO DO REGISTRO NAO FOI CADASTRADO," + "OU FOI DIGITADO INCORRETAMENTE,  VERIFIQUE...!");
			}
		} else {
			report.gravaRelatorio(4);
			return report.imprimir();
		}
		// RELATORIO
		faseproc = "0";
		sessao.setAtributo("SCRPR001", this);
		result.include("scrpr001A", scrpr001A);
		scrpr001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());

		return null;
	}

	private void restaurarEstados(Scrpr001A pscrpr001A, Scrpr001B pscrpr001B) {
		this.scrpr001Anterior = (Scrpr001) sessao.getAtributo("SCRPR001");
		if (pscrpr001A != null) {
			scrpr001A = pscrpr001A;
			scrpr001A.setjEmpresaj(sessao.getScrg001().getWEmpresaw());
			scrpr001A.setjVersaoj(sessao.getScrg001().getWVersaow());
			scrpr001A.setjProgramaj(sessao.getScrg001().getWProgramaw());

		} else {
			scrpr001A = this.scrpr001Anterior.scrpr001A;
		}
		scrpr001A.setSessao(sessao);
		if (pscrpr001B != null) {
			scrpr001B = pscrpr001B;
			scrpr001B.setjEmpresaj(sessao.getScrg001().getWEmpresaw());
			scrpr001B.setjVersaoj(sessao.getScrg001().getWVersaow());
			scrpr001B.setjProgramaj(sessao.getScrg001().getWProgramaw());
		} else {
			scrpr001B = this.scrpr001Anterior.scrpr001B;
		}
		scrpr001B.setSessao(sessao);
		this.faseproc = this.scrpr001Anterior.faseproc;
	}
}
